﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleJson;
namespace com.liyu.pluginframe.util
{
    public interface IGameSync
    {
            /**
     * 接收到开始游戏
     * by:王健 at:2015-5-19
     */
     void syncStartGame();

    /**
     * 接收游戏进度、积分、当前得分
     * by:王健 at:2015-5-19
     * @param user 玩家
     * @param point  得分
     */
     void syncGamePoints(string user, string point);

    /**
     * 将游戏的最终得分，以Map的形式，同步
     * by:王健 at:2015-5-19
     * @param user  玩家
     * @param point  得分
     */
     void syncEndGamePoints(string user, string point);

    /**
     * 服务器端发来游戏结束的信号
     * by:王健 at:2015-5-19
     */
     void syncEndGame();

    /**
     * 服务器端发来游戏结束的信号,某人结束
     * by:王健 at:2015-5-20
     * @param from 结束游戏的人
     */
     void syncEndGame(String from);

    /**
     * 自定义游戏数据的同步，同步给本客户端的
     * by:王健 at:2015-5-19
     * @param from   发起人
     * @param jsonObject 自定义信息
     */
     void syncGameData(string from, JsonObject jsonObject);

    /**
     * 自定义游戏数据的同步，同步给一部分人
     * by:王健 at:2015-5-19
     * @param from 发起人
     * @param to  接收人数组
     * @param jsonObject 自定义数据
     */
     void syncGameData(string from, string[] to, JsonObject jsonObject);

    /**
     * 同步游戏道具的使用，本客户端作为受体
     * by:王健 at:2015-5-19
     * @param from 发起人
     * @param property_flag 道具标示
     */
     void syncGamePropertyInfo(string from, string property_flag);

    /**
     * 同步游戏道具的使用，针对一批用户的道具
     * by:王健 at:2015-5-19
     * @param from 发起人
     * @param to 接收人数组
     * @param property_flag 道具标示
     */
     void syncGamePropertyInfo(string from, string[] to, string property_flag);

    /**
     * 向所有人发送聊天内容
     * by:王健 at:2015-5-20
     * @param from 发起人
     * @param msg 聊天内容
     */
     void syncChat(string from, string msg);


    /**
     * 向某人发送私聊
     * by:王健 at:2015-5-20
     * @param from 发起人
     * @param to 接收人数组
     * @param msg 聊天内容
     */
     void syncChat(string from, string to, string msg);

    /**
     * 人员变动
     * by:王健 at:2015-5-20
     * @param user 用户id
     * @param is_in  true为加入，false为推出
     * @param userinfo json格式用户信息，如果是用户离开房间，参数为空
     */
     void syncMemberChange(string user, bool is_in, JsonObject userinfo);

//    /**
//     * 被提出房间
//     * @param user 用户id，被用户 user剔除房间
//     */
//     void syncQuiteRoomByUser(String user);

    /**
     * 获取当前房间内用户信息
     * by:王健 at:2015-5-20
     * @param usernames
     * @param usermap
     */
     void syncRoomMembers(List<string> usernames, Dictionary<string, UserInfo> usermap);

    /**
     * 成功进入房间的回调函数
     * by:王健 at:2015-5-20
     */
     void syncInRoom();

    /**
     * 掉线
     *
     */
     void syncQuiteRoom();


    /**
     * 获取用户的游戏信息，游戏自行定义，满足json格式即可
     * by:王健 at:2015-5-20
     * @param json
     */
     void syncGameInfo(JsonObject json);

    /**
     *
     * 用户在本游戏中各个道具数量
     * by:王健 at:2015-5-20
     * @param propinfo
     */
     void syncUserPropertyInfo(Dictionary<string, int> propinfo);

    /**
     * 用户在本游戏中增加的道具数量
     * by:王健 at:2015-5-20
     * @param prop_flag   道具标示
     * @param num         道具变动数量
     * @param success     道具变动结果，true：变动成功；false：变动失败
     */
     void syncResultAddPropertyInfo(string prop_flag, int num, bool success);

    /**
     *
     * 用户使用道具记录
     * by:王健 at:2015-5-20
     * @param prop_flag  道具标示
     * @param num        道具使用数量
     * @param success    道具使用成功或失败
     */
     void syncUsedProperty(string prop_flag, int num, bool success);


    /**
     * 错误信息
     * by:王健 at:2015-08-09
     * @param message        错误信息
     * @param status_code    错误码
     */
     void syncError(string message, long status_code);
    }
}
